using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._TerritoryDesignTools._TerritorySolution
{
    /// <summary>
    /// <para>Create Territory Solution</para>
    /// <para>Creates a new territory solution with two levels and loads input features into the base level.</para>
    /// <para>创建具有两个级别的新区域解决方案，并将输入要素加载到基本级别。</para>
    /// </summary>    
    [DisplayName("Create Territory Solution")]
    public class CreateTerritorySolution : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public CreateTerritorySolution()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_features">
        /// <para>Input Features</para>
        /// <para>The geometry or data features that will be used as the base level of the created solution. The level will have the same name as the input features.</para>
        /// <para>将用作所创建解决方案的基本级别的几何或数据要素。该级别将与输入要素同名。</para>
        /// </param>
        /// <param name="_solution_name">
        /// <para>Territory Solution Name</para>
        /// <para>The name of the territory solution to be created.</para>
        /// <para>要创建的 territory 解决方案的名称。</para>
        /// </param>
        public CreateTerritorySolution(object _in_features, object _solution_name)
        {
            this._in_features = _in_features;
            this._solution_name = _solution_name;
        }
        public override string ToolboxName => "Territory Design Tools";

        public override string ToolName => "Create Territory Solution";

        public override string CallName => "td.CreateTerritorySolution";

        public override List<string> AcceptEnvironments => ["workspace"];

        public override object[] ParameterInfo => [_in_features, _solution_name, _id_field, _name_field, _territory_level_name, _default_territory_name, _out_territory_solution, _in_boundary_mask];

        /// <summary>
        /// <para>Input Features</para>
        /// <para>The geometry or data features that will be used as the base level of the created solution. The level will have the same name as the input features.</para>
        /// <para>将用作所创建解决方案的基本级别的几何或数据要素。该级别将与输入要素同名。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_features { get; set; }


        /// <summary>
        /// <para>Territory Solution Name</para>
        /// <para>The name of the territory solution to be created.</para>
        /// <para>要创建的 territory 解决方案的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Territory Solution Name")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _solution_name { get; set; }


        /// <summary>
        /// <para>ID Field</para>
        /// <para>The field that contains ID values for objects in the level.</para>
        /// <para>包含关卡中对象的 ID 值的字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("ID Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _id_field { get; set; } = null;


        /// <summary>
        /// <para>Name Field</para>
        /// <para>The field that contains name values for objects in the level.</para>
        /// <para>包含关卡中对象的名称值的字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Name Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _name_field { get; set; } = null;


        /// <summary>
        /// <para>Territory Level Name</para>
        /// <para>The name of the territory level—for example, level 2.</para>
        /// <para>区域级别的名称，例如级别 2。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Territory Level Name")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _territory_level_name { get; set; } = null;


        /// <summary>
        /// <para>Default Territory Name</para>
        /// <para>The prefix for the names of the new territories that will be created—for example, Territory 1, Territory 2, and Territory 3 or District 1, District 2, and District 3.</para>
        /// <para>将要创建的新区域名称的前缀，例如，区域 1、区域 2 和区域 3 或区域 1、区域 2 和区域 3。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Default Territory Name")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _default_territory_name { get; set; } = null;


        /// <summary>
        /// <para>Output Territory Solution</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Territory Solution")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_territory_solution { get; set; }


        /// <summary>
        /// <para>Boundary Mask</para>
        /// <para>The layer that is used as a mask to limit the growth of point-based layers.</para>
        /// <para>用作掩码以限制基于点的图层的增长的图层。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Boundary Mask")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _in_boundary_mask { get; set; } = null;


        public CreateTerritorySolution SetEnv(object workspace = null)
        {
            base.SetEnv(workspace: workspace);
            return this;
        }

    }

}